A DBMS (Database Management System) is an important mechanism for storing and managing many types of data. A DBMS comprises at least one database server. The database server is hosted on at least one computing element (e.g. computer, server blade) and may store database data in block mode storage devices. The block mode storage devices may be one or more disk drives and flash drives connected via a high-speed bus of the computing element to the one or more hardware processors (“processors”) of the computing element and/or memory of the computing element. A block mode storage device may also be a network enabled storage device that is connected via a network to the computing element and that comprises other block storage devices such as disk drives and flash drives.
More powerful DBMSs are hosted on a parallel processor hardware platform. Such DBMSs are referred to herein as multi-node DBMSs. A multi-node DBMS comprises multiple computing elements referred to herein as computing nodes. Each computing node comprises a hardware processor or multiple hardware processors that each share access to the same main memory. A multi-node DBMS may use one of several storage architectures to store database data.
One such architecture is referred to herein as the shared storage architecture that persistently stores database files in non-volatile memory (“NVM”) of computing nodes of a multi-node DBMS. Each node's persistent storage is served by NVM, accessible only to the compute on the respective node.
A DBMS may also use NVM as persistent storage. Regions of NVM map to disks and disks are backed by files stored in a direct access (DAX) enabled file system such as Ext4. A DBMS buffer cache maintains pointers (virtual addresses) that are mapped to NVM-backed physical addresses. When a region of NVM is mapped into a process's address space, the returned virtual address can be used to read from or write to the NVM region starting at the corresponding physical address. Buffers hold data blocks of database files, each of the data blocks being identified by a logical offset within the file. Each buffer is mapped to an offset of the data block. The buffer holds a database data file and a logical offset within the file. Such a file could be distributed across different NVM regions in various computing nodes of a DBMS.
Within the shared storage architecture, updates occurring on a first computing node cannot be synchronized to a second computing node, however, if the second computing node goes offline. Data blocks that are updated during the duration a computing node is down need to be resynchronized to that computing node's NVM before the computing node can start servicing I/O requests.
Additionally, High Availability (“HA”) requirements mandate that the same block of data be available for reads and writes from multiple computing nodes and that a loss of up to a certain number of computing nodes will not render the data inaccessible.
When a computing node goes offline and subsequently reconnects to the DBMS, the DBMS may restrict I/O access to the NVM of the computing node by not servicing any database commands until all of the non-updated (“stale”) data blocks have been resynchronized with the NVMs from the other computing nodes. This technique requires a significant amount of time and computing resources dedicated to resynchronizing all data blocks every time a computing node comes online. Additionally, during the resynchronization process, access to the NVM data blocks on the reconnected node is not available, which reduces availability of the computing node utility.
Described herein are approaches for on-demand stale data block resynchronization to improve computing node availability and utility in context of a DBMS.